Eine SeOS-Variante mit SQLite3 für die persistente Datenhaltung; siehe diub.SeOS. SeOS übernimmt die Verwaltungsaufgaben selber, daher legt es keine direkt lesbaren Daten in der SQLite-Datei ab.
Die Ableitung der Klasse SeOSQLite von der Klasse (diub.)SQLite wurde erst im Nachgang implementiert. Die Schnittstelle der Klasse SQLite für Tabellen-orientierte Zugriffe ist tatsächlich um ein vielfaches komplexer als SeOSQLite benötigt. Die Sammlungen dagegen bestehen grundsätzlich aus Tabellen mit nur zwei Spalten: Schlüssel ist Int64 oder String, der Wert immer ein BLOB. Die Notwendigkeit für die Klassenabhängigkeit entstand aus dem Wunsch, die Fähigkeiten von SeOSQLite und SQLite gleichzeitig in der selben Datenbank nutzen zu können.
Hinweis! Zur Vermeidung von Verwechslungen unterscheiden sich die Funktionsnamen deutlich von den bei SQL gebräuchlichen:
Insert → Store, Update → Refresh, Delete → Remove, Select → Get.
LUIDRecordBase
LUIDRecordBase ist eine Basis für Datenbank-Records mit einem UInt64 als UID. SeOSQLite stellt für diese Records zusätzlich eine vereinfachende Schnittstelle bereit. Die Nutzung ist rein optional.
Beispielklasse
public class TimedItem : LUIDRecordBase { public TimeStamp PersistenceTimeStamp; public string Value; }
internal SeOSQLite SEOS; SEOS = new SeOSQLite3 ("C:\\Example.sqlite"); bool b = SEOS.Connect (); // oder SEOS.Open (); ... bool b = SEOS.Disconnect (); // oder SEOS.Close ();
Collection anlegen
SEOS.AddCollection<Id> ("References"); SEOS.AddCollection<string> ("TimedItems");
Collection löschen
CommonStatus cs = DropCollection (collection_name);
Auflisten
List<CollectionInfo> infos = ListCollections ();
Store dient zum Speichern mit einer neuen UID.
Es gibt eine ganze Reihe von Varianten von Store welche die Kombinationsmöglichkeiten von TKey, LUIDRecordBase usw. widerspiegeln.
// TimedItem : LUIDRecordBase; TimedItem titem = new TimedItem(){..}; bool b0 = SeOS.StoreRecord (collection_name, titem); bool b1 = SeOS.Store (collection_name, titem.UID, titem);
Zur Aktualisierung dient Refresh.
bool b0 = SeOS.RefreshRecord (collection_name, titem); bool b1 = SeOS.Refresh (collection_name, titem.UID, titem);
Beim Auslesen muss der Typ des Objektes angegeben werden!
CommonStatus cs; TimedItem item; (cs, item) = GetOne<TimedItem> (collection_name, uid); List<TimedItem> list = GetAll<TimedItem> (collection_name);
Bei einer Abfrage mit Vergleichswerten muss als erstes der Typ des Schlüssels angegeben werden!
Hinweis! Felder lassen sich gemäß der C#-Namenskonvention angeben: "PersonInfo.Names.RearName".
QueryItem query = new QueryItem ( nameof(TimedItem.Value), // === "Value", Name des Feldes "Gesucht", // Vergleichswert QueryCompareType.Equal // Typ des Vergleichs ); // string ist der Typ des Schlüssels der Sammlung! (cs, item) = GetOne<string, TimedItem> (collection_name, query); (cs, list) = GetAll<string, TimedItem> (collection_name, query);
Beim Löschen mit Schlüssel muss als erstes der Typ des Schlüssels angegeben werden!
// string ist der Typ des Schlüssels der Sammlung! bool b0 = Remove<string> (collection_name, titem.UID); bool b1 = RemoveRecord (collection_name, titem);
Hinweis! Felder lassen sich gemäß der C#-Namenskonvention angeben: "PersonInfo.Names.RearName".
// string ist der Typ des angegebenen Feldes CommonStatus cs = AddIndex<string> (collection, nameof(TimedItem.Value));
Hinweis! Felder lassen sich gemäß der C#-Namenskonvention angeben: "PersonInfo.Names.RearName".
CommonStatus cs = DropIndex (collection_name, nameof(TimedItem.Value));